package com.piston.launcher;

import com.piston.app.R;
import com.piston.app.R.layout;

import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;

/**
 * Folder which contains applications or shortcuts chosen by the user.
 * 
 */
public class UserFolder extends Folder implements DropTarget {
	private static final String TAG = "Launcher.UserFolder";

	public UserFolder(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	/**
	 * Creates a new UserFolder, inflated from R.layout.user_folder.
	 * 
	 * @param context
	 *            The application's context.
	 * 
	 * @return A new UserFolder.
	 */
	static UserFolder fromXml(Context context) {
		return (UserFolder) LayoutInflater.from(context).inflate(
				R.layout.user_folder, null);
	}

	public boolean acceptDrop(DragSource source, int x, int y, int xOffset,
			int yOffset, DragView dragView, Object dragInfo) {
		final ItemInfo item = (ItemInfo) dragInfo;
		final int itemType = item.itemType;
		return (itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION || itemType == LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT)
				&& item.container != mInfo.id;
	}

	public Rect estimateDropLocation(DragSource source, int x, int y,
			int xOffset, int yOffset, DragView dragView, Object dragInfo,
			Rect recycle) {
		return null;
	}

	public void onDrop(DragSource source, int x, int y, int xOffset,
			int yOffset, DragView dragView, Object dragInfo) {
		ShortcutInfo item;
		if (dragInfo instanceof ApplicationInfo) {
			// Came from all apps -- make a copy
			item = ((ApplicationInfo) dragInfo).makeShortcut();
		} else {
			item = (ShortcutInfo) dragInfo;
		}
		((ShortcutsAdapter) mContent.getAdapter()).add(item);
		LauncherModel.addOrMoveItemInDatabase(mLauncher, item, mInfo.id, 0, 0,
				0);
	}

	public void onDragEnter(DragSource source, int x, int y, int xOffset,
			int yOffset, DragView dragView, Object dragInfo) {
	}

	public void onDragOver(DragSource source, int x, int y, int xOffset,
			int yOffset, DragView dragView, Object dragInfo) {
	}

	public void onDragExit(DragSource source, int x, int y, int xOffset,
			int yOffset, DragView dragView, Object dragInfo) {
	}

	@Override
	public void onDropCompleted(View target, boolean success) {
		if (success) {
			ShortcutsAdapter adapter = (ShortcutsAdapter) mContent.getAdapter();
			adapter.remove(mDragItem);
		}
	}

	void bind(FolderInfo info) {
		super.bind(info);
		setContentAdapter(new ShortcutsAdapter(getContext(),
				((UserFolderInfo) info).contents));
	}

	// When the folder opens, we need to refresh the GridView's selection by
	// forcing a layout
	@Override
	void onOpen() {
		super.onOpen();
		requestFocus();
	}
}
